This invention relates generally to the field of communications protocol implementation and specifically to the field of implementing communications protocols within microprocessor-based systems that have limited amounts of memory.
Many microprocessor-based systems are designed with limited memory resources, however there is an increasing but, often, conflicting desire to implement one or more communications protocols within them. Frequently, the requirements of a conventional general-purpose implementation of the communications protocols and the constrained memory size mean that there is insufficient capacity to store and process data packets within these systems.
Even in situations where memory availability is not an issue, there is a general requirement that the mechanisms used to implement communications protocols should impose a minimal run-time overhead. An additional consideration is that there are many applications of such systems where two or more, possibly unrelated, protocols may need to be implemented concurrently. Under these circumstances a mechanism that meets the requirements of one protocol may prove to be a very poor solution for another. It is also noteworthy that in order to best exploit the resources available within a system it is often advantageous to be able to store data in more than one type of memory, for example a fast on-chip memory and a slower, larger, off-chip memory.
A number of possible strategies for managing communication buffers have been developed previously, however these are mostly targeted at systems with larger amounts of memory than many of those to which this invention might apply. Related developments however would include the following:
The Berkeley Unix system implemented a strategy known as mbufs, each of which contains a portion of the data within a communication packet. The mbufs are joined together via various forms of linked list, which are in turn iterated around by special helper software functions to provide an apparently contiguous view of the packet to their users. The design of the mbufs are not suited to the present problem however because they assume that any information about the individual mbufs may be stored within the mbufs themselves and thus the run-time cost of accessing individual elements within them is quite high. In addition the mbufs are stored within the main system memory, that is impractical in limited memory devices. Finally, while mbufs offer a clustering solution that allows the sharing of data between two or more chains of buffers, the sharing introduces another level of indirection and run-time cost.
Linux utilizes a system called skbuffs, each of which is a relatively large fixed size and which may be grouped together if necessary to form larger blocks. The larger size allows for efficient run-time operation, however the size of a single skfbuff may be greater than the memory available within some embedded systems to which the invention may be applied, and multiple skbuffs must be available in order to implement any useful form of communications. Skbuffs also suffer the same problems as mbufs with their requirement to use main system memory.
Many large systems provide hardware support for virtual memory management. This allows the system to present the appearance of having more memory than it in fact does. In this situation, however, the software concepts employed within such systems to facilitate the memory management cannot be used because the underlying hardware does not support the virtual memory management mechanisms. In addition, virtual memory is primarily implemented using the main system memory; something that we cannot assume is available for use.
Many network interconnection devices such as the National Semiconductor NS8390 provide pages within their internal buffer memories, into which data packets may be read or written. Such solutions, however, require specialized hardware to support their activities. It is also characteristic of such implementations that all of the pages within a packet must be contiguous. Within their specific field of operation the requirement for contiguous pages is not a problem, however within a microprocessor""s software individual packets or portions of packets may be discarded without regard for the order in which they were created and thus such a simple solution is not suitable because it does not allow the memory to be managed effectively.
There are many other implementations of packet buffer memory management strategies in use, however these provide either subsets of the above, require large amounts of memory or use assumptions about the form of the data that will be processed (thus failing the requirement to be general purpose).
A communication protocol packet buffering system and method using paged memory management that provides a mechanism for a microprocessor-based system to manage communication (network) data packets. This buffering management strategy includes the individual network packet buffers (netbufs). Netbufs provide a general-purpose mechanism for managing communication packets and are not tied to any particular type of communication protocol. As such it is possible for the microprocessor-based system to use different netbufs for different purposes at the same time. For example, netbufs can be used in situations where one or more communications protocols are in use, such as in protocol converters or gateways. The netbufs allow a general-purpose implementation of a range of communication protocols within a microprocessor-based system that is conventionally deemed to have a memory capacity that is too small. Customers are thus able to implement applications in situations that would either have been previously impractical for reasons of cost or physical integration, or alternatively with lower-cost hardware.